package com.yunhe.option.service.base;

import com.yunhe.option.domain.base.TimeScale;
import com.yunhe.common.exception.ArgumentErrorException;
import com.yunhe.common.exception.ObjectNotFoundException;
import com.yunhe.common.exception.UniqueConstraintsException;
import org.springframework.transaction.annotation.Transactional;

/**
 * 时间尺度Service
 * @desc 时间尺度服务类定义
 * @author liuronglei
 */
public interface TimeScaleService {

    /**
     * 新增时间尺度
     * @param timeScale 时间尺度对象
     */
    @Transactional
    TimeScale createTimeScale(TimeScale timeScale)
            throws ArgumentErrorException, UniqueConstraintsException;

    /**
     * 删除时间尺度
     * @param timeScaleId 时间尺度ID
     */
    @Transactional
    void deleteTimeScale(Long timeScaleId);

    /**
     * 更新时间尺度（更新全部字段）
     * @param timeScale 时间尺度对象
     */
    @Transactional
    TimeScale updateTimeScale(TimeScale timeScale)
            throws ArgumentErrorException, UniqueConstraintsException, ObjectNotFoundException;

    /**
     * 更新时间尺度（更新指定字段）
     * @param timeScaleId 时间尺度ID
     * @param code 代码
     * @param name 编号
     * @param title 标题
     * @param sn 排序序号
     * @param activity 是否可用
     */
    @Transactional
    TimeScale updateTimeScale(Long timeScaleId,
                              Long code,
                              String name,
                              String title,
                              Long sn,
                              Boolean activity)
            throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException;

    /**
     * 根据ID获得时间尺度对象
     * @param id 状态ID
     */
    TimeScale findByTimeScaleId(Long id);

    /**
     * 根据代码获得时间尺度对象
     * @param code 代码
     */
    TimeScale findByCode(Long code);

    /**
     * 根据编号获得时间尺度对象
     * @param name 编号
     */
    TimeScale findByName(String name);

    /**
     * 获得全部时间尺度对象
     */
    Iterable<TimeScale> findTimeScales();

}
